package comtgl.demo.utils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Md2JsonUtils {

    public static void main(String[] args) {
        // 示例Markdown字符串
//        String markdown = "# 标题一\n这是一个段落。\n\n## 标题二\n- 列表项1\n- 列表项2\n\n1. 有序项1\n2. 有序项2";
        String markdown = "\"内容：  \n1. **TCL华星与细野秀雄教授合作**：IGZO技术奠基人细野秀雄教授签约TCL华星特聘技术顾问，双方将深化高迁氧化物材料研究，推动显示技术从实验室走向产业化，彰显技术创新对企业发展的重要性。  \n\n2. **海信“双万计划”启动**：海信专卖店迈入“万店时代”，并宣布“双万计划”，目标未来五年达到20000家门店，构建三级网络覆盖城镇，通过线上线下融合巩固行业领先地位。  \\n\\n3. **家电行业竞争加剧**：2024年家电行业竞争激烈，小米以低价策略冲击市场，海信挖角美的前副总裁殷必彤，董明珠批评低价空调偷工减料，行业巨头纷纷通过直播带货和创新策略应对挑战。  \\n\\n4. **华为客户洞察秘诀**：华为总结16字方针，通过聆听和分析精准掌握客户核心需求，确保产品成功，为行业提供了客户需求洞察的典范。  \\n\\n5. **海尔教育公益升级**：海尔希望小学首届科技节举办，首个“海尔小科学家”科技实验室落成，推动教育公益从硬件援建向科技赋能升级，激发青少年创新潜能。  \\n\\n以上资讯为企业高管提供了技术创新、市场拓展、行业竞争及社会责任等方面的关键洞察。";

        // 转换为JSON
        String json = convertMarkdownToJson(markdown);

        // 打印结果
        System.out.println(json);
    }

    public static String convertMarkdownToJson(String markdown) {
        if (markdown == null || markdown.isEmpty()) {
            return "[]";
        }

        // 按行分割Markdown字符串
        String[] lines = markdown.split("\\r?\\n");
        List<String> markdownLines = new ArrayList<>();
        for (String line : lines) {
            markdownLines.add(line);
        }

        // 转换为JSON结构
        List<Map<String, Object>> document = new ArrayList<>();

        List<String> currentList = null;
        String currentListType = null;

        for (String line : markdownLines) {
            line = line.trim();

            // 跳过空行
            if (line.isEmpty()) {
                continue;
            }

            // 处理标题
            if (line.startsWith("#")) {
                // 关闭可能存在的列表
                if (currentList != null) {
                    addListToDocument(document, currentList, currentListType);
                    currentList = null;
                    currentListType = null;
                }

                int level = 0;
                while (level < line.length() && line.charAt(level) == '#') {
                    level++;
                }
                String titleText = line.substring(level).trim();

                Map<String, Object> title = new HashMap<>();
                title.put("type", "heading");
                title.put("level", level);
                title.put("text", titleText);
                document.add(title);
                continue;
            }

            // 处理有序列表
            Pattern orderedListPattern = Pattern.compile("^(\\d+)\\.\\s+(.*)$");
            Matcher orderedListMatcher = orderedListPattern.matcher(line);
            if (orderedListMatcher.matches()) {
                if (currentList == null || !"ordered".equals(currentListType)) {
                    if (currentList != null) {
                        addListToDocument(document, currentList, currentListType);
                    }
                    currentList = new ArrayList<>();
                    currentListType = "ordered";
                }
                currentList.add(orderedListMatcher.group(2));
                continue;
            }

            // 处理无序列表
            Pattern unorderedListPattern = Pattern.compile("^([-+*])\\s+(.*)$");
            Matcher unorderedListMatcher = unorderedListPattern.matcher(line);
            if (unorderedListMatcher.matches()) {
                if (currentList == null || !"unordered".equals(currentListType)) {
                    if (currentList != null) {
                        addListToDocument(document, currentList, currentListType);
                    }
                    currentList = new ArrayList<>();
                    currentListType = "unordered";
                }
                currentList.add(unorderedListMatcher.group(2));
                continue;
            }

            // 如果当前有打开的列表，关闭它
            if (currentList != null) {
                addListToDocument(document, currentList, currentListType);
                currentList = null;
                currentListType = null;
            }

            // 处理段落
            Map<String, Object> paragraph = new HashMap<>();
            paragraph.put("type", "paragraph");
            paragraph.put("text", line);
            document.add(paragraph);
        }

        // 关闭最后一个可能打开的列表
        if (currentList != null) {
            addListToDocument(document, currentList, currentListType);
        }

        // 使用Gson库将列表转换为JSON字符串
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        return gson.toJson(document);
    }

    private static void addListToDocument(List<Map<String, Object>> document, List<String> listItems, String listType) {
        Map<String, Object> list = new HashMap<>();
        list.put("type", listType + "List");
        list.put("items", listItems);
        document.add(list);
    }
}